#include "head.h"

const wchar_t *title = L"用户菜单";
const wchar_t *option_1[] = {L"登陆", L"注册", L"退出"};

const wchar_t *title_root = L"管理员用户菜单";
const wchar_t *option_root[] = {
    L"设定航班",
    L"修改航班",
    L"修改普通用户",
    L"增加超级用户",
    L"退出登录"};
const wchar_t *title_user = L"用户菜单";
const wchar_t *option_user[] = {
    L"购票退票",
    L"余额充值",
    L"查看航班",
    L"修改信息",
    L"我的订单",
    L"退出登录"};

int flag_1; // 判断进入不同进度条
// 系统初始化
FlightSystem Sys_init(void)
{
    FlightSystem Flight_sys;
    Flight_sys.Flight_list = init_double_link_list(); // 航班信息
    Flight_sys.ADMIN_USER = user_init_list();         // 管理员账户信息
    Flight_sys.REGULAR_USER = user_init_list();       // 普通用户信息
    Flight_sys.SILVER_USER = user_init_list();        // 银卡会员信息 (9折)
    Flight_sys.GOLD_USER = user_init_list();          // 金卡会员信息 (8折)
    Flight_sys.PLATINUM_USER = user_init_list();      // 白金会员信息 (7折)

    // 从文件中导入数据
    flight_data_file_scanf(Flight_sys.Flight_list);       // 航班信息
    uesr_fscanf(Flight_sys.ADMIN_USER, ADMIN_FILE);       // 管理员账户信息文件
    uesr_fscanf(Flight_sys.REGULAR_USER, REGULAR_FILE);   // 普通用户信息文件
    uesr_fscanf(Flight_sys.SILVER_USER, SILVER_FILE);     // 银卡会员信息文件 (9折)
    uesr_fscanf(Flight_sys.GOLD_USER, GOLD_FILE);         // 金卡会员信息文件 (8折)
    uesr_fscanf(Flight_sys.PLATINUM_USER, PLATINUM_FILE); // 白金会员信息文件 (7折)

    system("clear");
    return Flight_sys;
}

// 系统登录
f_user Sys_log_in(FlightSystem Flight_sys)
{
    // 用户信息合表
        u_list *list = user_init_list();
        list = merge_user_list(list, Flight_sys.ADMIN_USER);    // 管理员账户信息文件
        list = merge_user_list(list, Flight_sys.REGULAR_USER);  // 普通用户信息文件
        list = merge_user_list(list, Flight_sys.SILVER_USER);   // 银卡会员信息文件 (9折)
        list = merge_user_list(list, Flight_sys.GOLD_USER);     // 金卡会员信息文件 (8折)
        list = merge_user_list(list, Flight_sys.PLATINUM_USER); // 白金会员信息文件 (7折)
    // Sql_list_array ;

    int choice = Menu_option(title, option_1, 3);
    switch (choice)
    {
    case 1:
        break;
    case 2:
        reg_in(Flight_sys.REGULAR_USER);
        exit(-1);
        break;
    case 3:
        exit(-1);
        break;
    }
    // 开始登录        
    f_user log_data = log_in(list);
        return log_data;
}

// 进度条
void Progress_Bar(int x, int y, float time_length)
{
    float flag = 0;                          // 当前进度时间
    float total_length = 20;                 // 进度条总长度
    float mean = time_length / total_length; // 平均数
    float temp = 0;                          // 和平均数对比
    float percent = 0;                       // 用于显示百分比
    int num = 0;                             // 控制进度条符号的个数

    while (1)
    {

        if (fabs(temp - mean) < EPSILON) // 使用fabs计算浮点数差值的绝对值
        {
            num++;
            temp = 0;
        }
        for (size_t i = 0; i < y; i++)
        {
            putchar('\n');
        }
        for (size_t i = 0; i < x; i++)
        {
            putchar(' ');
        }

        putchar('[');
        for (size_t i = 0; i < num; i++)
        {
            printf(">");
        }
        for (size_t i = 0; i < total_length - num; i++)
        {
            printf(" ");
        }
        putchar(']');
        if (1 == flag_1 || 2 == flag_1 || 3 == flag_1 || 4 == flag_1 || 5 == flag_1)
            percent = ((time_length / 30) * flag) * 330; // 3秒
        //     percent = ((time_length / 50) * flag) * 200; //5秒
        // else if (-2 == flag_2 || -3 == flag_2)
        //    printf("输入错误超过三次,请等待5秒后重试\n");

        printf("%.2f%%\n", percent);
        temp += 0.01;
        flag += 0.01;
        if (fabs((flag - 0.01) - time_length) < EPSILON)
        {
            break;
        }
        fflush(stdout);
        usleep(10000);
        system("clear");

        if (1 == flag_1)
        {
            printf("欢迎管理员用户登陆\n");
            printf("您是猫猫飞行管理员\n");
            printf("正在为您加载界面\n");
        }

        else if (2 == flag_1)
        {
            printf("欢迎普通用户\n");
            printf("正在为您加载界面\n");
        }
        else if (3 == flag_1)
        {
            printf("欢迎白银会员\n");
            printf("正在为您加载界面\n");
        }
        else if (4 == flag_1)
        {
            printf("欢迎黄金会员\n");
            printf("正在为您加载界面\n");
        }
        else if (5 == flag_1)
        {
            printf("欢迎白金会员\n");
            printf("正在为您加载界面\n");
        }
    }
    system("clear");
}
// 系统菜单
void Sys_menu(FlightSystem *Flight_SYS, f_user log_data)
{
    // 分支
    Sql_list_array L;
    log_data.ticket = &L;
    arr_init_Sql_List(log_data.ticket);
    while (1)
    {
        int flag = 0;
        switch (log_data.IDcard)
        {
        case 0:
            // 管理员功能界面
            flag_1 = 1;
            Progress_Bar(0, 0, 3);
            flag = Menu_option(title_root, option_root, 5);
            break;
        case 1:
            // 普通用户功能界面
            flag_1 = 2;
            Progress_Bar(0, 0, 3);
            flag = Menu_option(title_user, option_user, 6) + 5;
            break;
        case 2:
            // 白银会员功能界面
            flag_1 = 3;
            printf("欢迎白银会员登陆\n");
            Progress_Bar(0, 0, 3);
            flag = Menu_option(title_user, option_user, 6) + 5;
            break;
        case 3:
            // 黄金会员功能界面
            flag_1 = 4;
            printf("欢迎黄金会员登陆\n");
            Progress_Bar(0, 0, 3);
            flag = Menu_option(title_user, option_user, 6) + 5;
            break;
        case 4:
            // 白金会员功能界面
            flag_1 = 5;
            printf("欢迎白金会员登陆\n");
            Progress_Bar(0, 0, 3);
            flag = Menu_option(title_user, option_user, 6) + 5;
            break;
        }
        // 管理员用户菜单
        //  菜单选项分支处理

        switch (flag)
        {
        case 1:
            // 管理员 - 设定航班
            root_set_flight(Flight_SYS->Flight_list);
            break;
        case 2:
            // 管理员 - 修改航班
            root_update_flight(Flight_SYS->Flight_list);
            break;
        case 3:
            // 管理员 - 修改普通用户
            root_update_user(Flight_SYS);
            break;
        case 4:
            // 管理员 - 增加超级用户
            root_add_root(Flight_SYS);
            break;
        case 5:
            // 退出登录
            log_quit();
            break;
        case 6:
            // 用户 - 购票退票
            buy_and_return_ticket(Flight_SYS, &log_data);
            break;
        case 7:
            // 用户 - 余额充值
            user_get_value(Flight_SYS, &log_data);
            break;
        case 8:
            // 用户 - 查看航班
            check_flight_find(Flight_SYS->Flight_list);
            break;
        case 9:
            // 用户 - 修改信息
            user_change_password(Flight_SYS, &log_data);
            break;
        case 10:
            // 用户 - 我的订单
            check_my_ticket(&log_data);
            break;
        case 11:
            // 退出登录
            log_quit();
            break;
        default:
            break;
        }
    }
}
